package com.zhihao.zhihaopicturebackend.model.vo;

import cn.hutool.json.JSONUtil;
import com.zhihao.zhihaopicturebackend.model.entity.ServicePicture;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author Jackson
 * @create 2024/12/23 16:25
 * @description 图片响应返回类
 */
//@ApiModel("图片响应返回类")
@Data
public class PictureVO implements Serializable {

    /**
     * id
     */
    @ApiModelProperty(value = "图片id")
    private Long id;

    /**
     * 图片 url
     */
    @ApiModelProperty(value = "图片地址")
    private String url;

    /**
     * webp轻量级格式图
     */
    @ApiModelProperty(value = "webp格式压缩图")
    private String webpUrl;

    /**
     * 缩略图 url
     */
    @ApiModelProperty(value = "缩略图")
    private String thumbnailUrl;

    /**
     * 图片名称
     */
    @ApiModelProperty(value = "图片名称")
    private String name;

    /**
     * 简介
     */
    @ApiModelProperty(value = "图片简介")
    private String introduction;

    /**
     * 标签(表中字段为Json格式字符串，此处转化为List)
     */
    @ApiModelProperty(value = "图片标签")
    private List<String> tags;

    /**
     * 分类
     */
    @ApiModelProperty(value = "图片分类")
    private String category;

    /**
     * 文件体积
     */
    @ApiModelProperty(value = "图片大小")
    private Long picSize;

    /**
     * 图片宽度
     */
    @ApiModelProperty(value = "图片宽度")
    private Integer picWidth;

    /**
     * 图片高度
     */
    @ApiModelProperty(value = "图片高度")
    private Integer picHeight;

    /**
     * 图片比例
     */
    @ApiModelProperty(value = "图片比例")
    private Double picScale;

    /**
     * 图片格式
     */
    @ApiModelProperty(value = "图片格式")
    private String picFormat;

    /**
     * 图片主色调
     */
    @ApiModelProperty(value = "图片主色调")
    private String picColor;

    /**
     * 用户 id
     */
    @ApiModelProperty(value = "用户id")
    private Long userId;

    /**
     * 空间 id
     */
    private Long spaceId;

    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间")
    private Date createTime;

    /**
     * 编辑时间
     */
    @ApiModelProperty(value = "编辑时间")
    private Date editTime;

    /**
     * 更新时间
     */
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;

    /**
     * 创建用户信息
     */
    @ApiModelProperty(value = "用户信息")
    private UserVO user;

    /**
     * 权限列表(用于前端展示当前登录用户具备的图片操作权限)
     */
    private List<String> permissionList = new ArrayList<>();

    private static final long serialVersionUID = 1L;

    /**
     * 封装类转对象
     */
    public static ServicePicture voToObj(PictureVO pictureVO) {
        if (pictureVO == null) {
            return null;
        }
        ServicePicture picture = new ServicePicture();
        BeanUtils.copyProperties(pictureVO, picture);
        // 类型不同，需要转换
        picture.setTags(JSONUtil.toJsonStr(pictureVO.getTags()));
        return picture;
    }

    /**
     * 对象转封装类
     */
    public static PictureVO objToVo(ServicePicture picture) {
        if (picture == null) {
            return null;
        }
        PictureVO pictureVO = new PictureVO();
        BeanUtils.copyProperties(picture, pictureVO);
        // 类型不同，需要转换
        pictureVO.setTags(JSONUtil.toList(picture.getTags(), String.class));
        return pictureVO;
    }
}